<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>Metodología de la Programación II: Fichero Fuente src/TablaDistancia.cpp</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generado por Doxygen 1.5.5 -->
<div class="navigation" id="top">
  <div class="tabs">
    <ul>
      <li><a href="main.html"><span>Página&nbsp;principal</span></a></li>
      <li><a href="classes.html"><span>Clases</span></a></li>
      <li class="current"><a href="files.html"><span>Archivos</span></a></li>
    </ul>
  </div>
<h1>src/TablaDistancia.cpp</h1><a href="TablaDistancia_8cpp.html">Ir a la documentación de este archivo.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 
<a name="l00008"></a>00008 <span class="preprocessor">#include &lt;iostream&gt;</span>
<a name="l00009"></a>00009 <span class="preprocessor">#include &lt;cassert&gt;</span>
<a name="l00010"></a>00010 <span class="preprocessor">#include &lt;<a class="code" href="TablaDistancia_8h.html" title="Interfaz para trabajar con la tabla de bits adicionales para la codificación de...">TablaDistancia.h</a>&gt;</span>
<a name="l00011"></a>00011 
<a name="l00012"></a>00012 <span class="keyword">using namespace </span>std;
<a name="l00013"></a>00013 
<a name="l00014"></a><a class="code" href="classTablaDistancia.html#a2e841294b60e40de9033b56f976a3a4">00014</a> <a class="code" href="classTablaDistancia.html#a2e841294b60e40de9033b56f976a3a4" title="Constructor por defecto  crea la tabla rellena con los valores estandar.">TablaDistancia :: TablaDistancia</a> ()
<a name="l00015"></a>00015 {
<a name="l00016"></a>00016         <span class="keywordtype">int</span> tam = 30;
<a name="l00017"></a>00017 
<a name="l00018"></a>00018 <span class="comment">//Creación de memoria dinámica</span>
<a name="l00019"></a>00019         codigo = <span class="keyword">new</span> <span class="keywordtype">int</span>[tam];
<a name="l00020"></a>00020         nbits = <span class="keyword">new</span> <span class="keywordtype">int</span>[tam];
<a name="l00021"></a>00021         distancia = <span class="keyword">new</span> <span class="keywordtype">int</span> *[tam];
<a name="l00022"></a>00022 
<a name="l00023"></a>00023         <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0; i&lt;tam; i++)
<a name="l00024"></a>00024                 distancia[i] = <span class="keyword">new</span> <span class="keywordtype">int</span>[2];
<a name="l00025"></a>00025 
<a name="l00026"></a>00026 <span class="comment">//Declaración de variables para la creación de la tabla</span>
<a name="l00027"></a>00027         <span class="keywordtype">int</span> cod = 0; <span class="comment">//el inicio de código de la tabla es de 0</span>
<a name="l00028"></a>00028         <span class="keywordtype">int</span> bit = 0; <span class="comment">//control de los nbits que tiene cada longitud</span>
<a name="l00029"></a>00029         <span class="keywordtype">int</span> dist = 1; <span class="comment">//el inicio de la distancia de la tabla es de 1</span>
<a name="l00030"></a>00030 
<a name="l00031"></a>00031 <span class="comment">//Rellenado de la tabla</span>
<a name="l00032"></a>00032         <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i=0; i&lt;tam; i++)
<a name="l00033"></a>00033         {
<a name="l00034"></a>00034                 <span class="keywordflow">if</span> (i &lt; 4)
<a name="l00035"></a>00035                 {
<a name="l00036"></a>00036                         codigo[i] = cod;
<a name="l00037"></a>00037                         nbits[i] = bit;
<a name="l00038"></a>00038                         distancia[i][0] = dist;
<a name="l00039"></a>00039                         distancia[i][1] = dist;
<a name="l00040"></a>00040                 }
<a name="l00041"></a>00041                 <span class="keywordflow">else</span>
<a name="l00042"></a>00042                 {
<a name="l00043"></a>00043                         <span class="comment">//Si a partir del 4 es par el número de bits aumenta en 1</span>
<a name="l00044"></a>00044                         <span class="keywordflow">if</span> (i%2 == 0)   bit++;
<a name="l00045"></a>00045                         codigo[i] = cod;
<a name="l00046"></a>00046                         nbits[i] = bit;
<a name="l00047"></a>00047                         distancia[i][0] = dist;
<a name="l00048"></a>00048                         <span class="comment">//d=2^bit</span>
<a name="l00049"></a>00049                         <span class="keywordtype">int</span> d=1;
<a name="l00050"></a>00050                         <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j=0; j&lt;bit; j++)
<a name="l00051"></a>00051                                 d *= 2;
<a name="l00052"></a>00052                         <span class="comment">//la distancia del intervalo se haya como dist=dist+2^bit-1</span>
<a name="l00053"></a>00053                         dist += d-1;
<a name="l00054"></a>00054                         distancia[i][1] = dist;
<a name="l00055"></a>00055                 }
<a name="l00056"></a>00056                 <span class="comment">//incremento de código y distancia</span>
<a name="l00057"></a>00057                 cod++;
<a name="l00058"></a>00058                 dist++;
<a name="l00059"></a>00059         }
<a name="l00060"></a>00060 }
<a name="l00061"></a>00061 
<a name="l00062"></a><a class="code" href="classTablaDistancia.html#7b606c362988aac9743c2efb85577aa5">00062</a> <a class="code" href="classTablaDistancia.html#7b606c362988aac9743c2efb85577aa5" title="Destructor  libera toda la memoria reservada.">TablaDistancia :: ~TablaDistancia</a> ()
<a name="l00063"></a>00063 {
<a name="l00064"></a>00064         <span class="keyword">delete</span> [] codigo;
<a name="l00065"></a>00065         <span class="keyword">delete</span> [] nbits;
<a name="l00066"></a>00066         <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i=0; i&lt;30; i++)
<a name="l00067"></a>00067                 <span class="keyword">delete</span> [] distancia[i];
<a name="l00068"></a>00068         <span class="keyword">delete</span> [] distancia;
<a name="l00069"></a>00069 }
<a name="l00070"></a>00070 
<a name="l00071"></a><a class="code" href="classTablaDistancia.html#06aa1bfe06b1cc24bd331156bb1a229a">00071</a> <span class="keywordtype">void</span> <a class="code" href="classTablaDistancia.html#06aa1bfe06b1cc24bd331156bb1a229a" title="Escribe la tabla en la salida estandar.">TablaDistancia :: Escribir</a> ()<span class="keyword"> const</span>
<a name="l00072"></a>00072 <span class="keyword"></span>{
<a name="l00073"></a>00073         <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i=0; i&lt;30; i++)
<a name="l00074"></a>00074         {
<a name="l00075"></a>00075                 cout &lt;&lt; codigo[i] &lt;&lt; <span class="stringliteral">"----"</span>&lt;&lt;nbits[i]&lt;&lt;<span class="stringliteral">"------"</span>;
<a name="l00076"></a>00076                 cout&lt;&lt;distancia[i][0]&lt;&lt;<span class="stringliteral">","</span>&lt;&lt;distancia[i][1]&lt;&lt;endl;
<a name="l00077"></a>00077         }
<a name="l00078"></a>00078 }
<a name="l00079"></a>00079 
<a name="l00080"></a><a class="code" href="classTablaDistancia.html#399b6d7e82fd072b6a4c035eaef5437d">00080</a> <span class="keywordtype">int</span> <a class="code" href="classTablaDistancia.html#399b6d7e82fd072b6a4c035eaef5437d">TablaDistancia :: GetCodigo</a> (<span class="keywordtype">int</span> l)<span class="keyword"> const</span>
<a name="l00081"></a>00081 <span class="keyword"></span>{
<a name="l00082"></a>00082         assert (l &gt;= 1 &amp;&amp; l &lt;= 32768);
<a name="l00083"></a>00083         <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i=0; i&lt;30; i++)
<a name="l00084"></a>00084                 <span class="keywordflow">if</span> (l &gt;= distancia[i][0] &amp;&amp; l &lt;= distancia[i][1])
<a name="l00085"></a>00085                         <span class="keywordflow">return</span> codigo[i];
<a name="l00086"></a>00086     <span class="keywordflow">return</span> 0; <span class="comment">//no llega</span>
<a name="l00087"></a>00087 }
<a name="l00088"></a>00088 
<a name="l00089"></a><a class="code" href="classTablaDistancia.html#610479f01a07465502ca8eb154b7b1d5">00089</a> <span class="keywordtype">int</span> <a class="code" href="classTablaDistancia.html#610479f01a07465502ca8eb154b7b1d5">TablaDistancia :: GetBits</a> (<span class="keywordtype">int</span> l)<span class="keyword"> const</span>
<a name="l00090"></a>00090 <span class="keyword"></span>{
<a name="l00091"></a>00091         assert (l &gt;= 1 &amp;&amp; l &lt;= 32768);
<a name="l00092"></a>00092         <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i=0; i&lt;30; i++)
<a name="l00093"></a>00093                 <span class="keywordflow">if</span> (l &gt;= distancia[i][0] &amp;&amp; l &lt;= distancia[i][1])
<a name="l00094"></a>00094                         <span class="keywordflow">return</span> nbits[i];
<a name="l00095"></a>00095         <span class="keywordflow">return</span> 0; <span class="comment">//no llega</span>
<a name="l00096"></a>00096 }
<a name="l00097"></a>00097 
<a name="l00098"></a><a class="code" href="classTablaDistancia.html#50e405736efef2d511755a2abbf38ef7">00098</a> <span class="keywordtype">int</span> <a class="code" href="classTablaDistancia.html#50e405736efef2d511755a2abbf38ef7">TablaDistancia :: GetRangoLongitud</a> (<span class="keywordtype">int</span> l)<span class="keyword"> const</span>
<a name="l00099"></a>00099 <span class="keyword"></span>{
<a name="l00100"></a>00100         assert (l &gt;= 1 &amp;&amp; l &lt;= 32768);
<a name="l00101"></a>00101         <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i=0; i&lt;30; i++)
<a name="l00102"></a>00102                 <span class="keywordflow">if</span> (l &gt;= distancia[i][0] &amp;&amp; l &lt;= distancia[i][1])
<a name="l00103"></a>00103                         <span class="keywordflow">return</span> distancia[i][0];
<a name="l00104"></a>00104         <span class="keywordflow">return</span> 0; <span class="comment">//no llega</span>
<a name="l00105"></a>00105 }
<a name="l00106"></a><a class="code" href="classTablaDistancia.html#9305d47f4bacf81843e0417457219484">00106</a> <a class="code" href="classVectorBits.html" title="Modulo que representa un vector de bits.">VectorBits</a> <a class="code" href="classTablaDistancia.html#9305d47f4bacf81843e0417457219484">TablaDistancia :: GetBitsAdicionales</a> (<span class="keywordtype">int</span> l)<span class="keyword"> const</span>
<a name="l00107"></a>00107 <span class="keyword"></span>{
<a name="l00108"></a>00108         assert (l &gt;= 1 &amp;&amp; l &lt;= 32768);
<a name="l00109"></a>00109         <span class="keywordtype">int</span> bit = <a class="code" href="classTablaDistancia.html#610479f01a07465502ca8eb154b7b1d5">GetBits</a>(l);
<a name="l00110"></a>00110         <span class="keywordtype">int</span> rango = <a class="code" href="classTablaDistancia.html#50e405736efef2d511755a2abbf38ef7">GetRangoLongitud</a>(l);
<a name="l00111"></a>00111         <span class="keywordtype">int</span> num = l - rango;
<a name="l00112"></a>00112         <a class="code" href="classVectorBits.html" title="Modulo que representa un vector de bits.">VectorBits</a> v(num,bit);
<a name="l00113"></a>00113         <span class="keywordflow">return</span> v;
<a name="l00114"></a>00114 }
<a name="l00115"></a>00115 
<a name="l00116"></a><a class="code" href="classTablaDistancia.html#7b685d9e325fe13267d42da052bb07fa">00116</a> <span class="keywordtype">int</span> <a class="code" href="classTablaDistancia.html#7b685d9e325fe13267d42da052bb07fa">TablaDistancia :: PrimerRango</a> (<span class="keywordtype">int</span> cod)
<a name="l00117"></a>00117 {
<a name="l00118"></a>00118         assert (cod &gt;=0 &amp;&amp; cod &lt; 30);
<a name="l00119"></a>00119         <span class="keywordflow">return</span> distancia[cod][0];
<a name="l00120"></a>00120 }
<a name="l00121"></a>00121 
<a name="l00122"></a><a class="code" href="classTablaDistancia.html#9134297eb97268f9ae7ff641339261dc">00122</a> <span class="keywordtype">int</span> <a class="code" href="classTablaDistancia.html#9134297eb97268f9ae7ff641339261dc">TablaDistancia :: NBits</a> (<span class="keywordtype">int</span> cod)
<a name="l00123"></a>00123 {
<a name="l00124"></a>00124         assert (cod &gt;=0 &amp;&amp; cod &lt; 30);
<a name="l00125"></a>00125         <span class="keywordflow">return</span> nbits[cod];
<a name="l00126"></a>00126 }
</pre></div></div>
<hr size="1"><address style="text-align: right;"><small>Generado el Thu Jun 10 12:36:12 2010 para Metodología de la Programación II por&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address>
</body>
</html>
